package com.tyk.bookstore.front.order.service;

import com.tyk.bookstore.front.order.model.query.OrderAddressUpdateQuery;
import com.tyk.bookstore.front.order.model.query.OrderCancelQuery;
import com.tyk.bookstore.front.order.model.query.OrderPageQuery;
import com.tyk.bookstore.front.order.model.query.OrderSubmitQuery;
import com.tyk.bookstore.front.order.model.vo.*;
import com.tyk.bookstore.front.order.vo.OrderAddressVo;
import com.tyk.bookstore.front.order.vo.OrderSplitVo;

import java.util.List;
import java.util.Set;

/**
 * @author tyk
 * @description 订单管理
 */
public interface OrderService {

    /**
     * 创建订单
     */
    OrderCreateVo createOrder();

    /**
     * 提交订单
     * @param query 订单提交参数
     */
    OrderSubmitVo submitOrder(OrderSubmitQuery query);

    /**
     * 取消订单
     * Web上下文环境中使用
     */
    void cancel(OrderCancelQuery query);

    /**
     * 取消订单
     * 非Web上下文环境中使用：手动传递memberId
     */
    void cancel(OrderCancelQuery query, Long memberId);

    /**
     * 获取待支付订单支付信息
     */
    OrderSubmitVo getWaitPayInfo(Long orderId);


    /**
     * 获取订单详情
     */
    OrderVo getById(Long id);


    /**
     * 获取拆单详情
     */
    OrderSplitVo getSplitById(Long id);


    /**
     * 分页查询订单
     */
    OrderPageVo getPage(OrderPageQuery query);


    /**
     * 删除订单
     */
    void deleteById(Long id);

    /**
     * 批量删除订单
     */
    void deleteBatchByIdSet(Set<Long> idSet);

    /**
     * 获取订单收货地址
     */
    OrderAddressVo getAddressById(Long id);

    /**
     * 更新订单收货地址
     */
    void updateAddress(OrderAddressUpdateQuery query);

    /**
     * 确认收货
     */
    void confirmById(Long id);

    /**
     * 获取订单待评价商品列表
     */
    List<WaitCommentVo> getWaitCommentList(Long id);
}
